Language Server
プログラムのコードを解析して情報を提供する
ローカルに立てられるサーバー
コード検証はリソース負荷の高い処理
なのでクライアントとは別プロセスでサーバーを立てて行う
各言語ごとに実装が必要
何が嬉しいのか
Language ServerがサポートされたIDEでは、
型やプロパティなどの自動補完
変数、関数、プロパティなどの定義参照
変数、関数などが利用されている場所の検索
コードのフォーマット
エラー分析、修正案の提示
などができる
言語サーバー自体はどの言語で実装されていてもいい
まぁ普通に考えれば、言語Aの言語サーバーはAで書くのが楽だと思うが
LSPに則っていればやり取りできる
クライアントはIDEに依存する?
例えばVSCodeならTypeScriptかJSじゃないといけない?
1つのIDEで複数のサーバーを使うことができる
例えばVSCodeの一つのワークスペースででNimとTypeScriptのファイルを開くと
Nim用とTypeScript用の2つの言語サーバーが起動する
結局こいつは何をやってるんだ?
コード例
誰が作る?
IDEの開発元?
言語の開発元?
誰でも作れる?
これ
Language Serverがもっと具体的にどう解析してるのかを知りたいな
仕組み
go to definitionとかどうやって特定してるの?
普通のコンパイラと何処が同じで何処が違うのか
実装例
「EmacsでLSPを使えるパッケージ」って言い方に違和感があるが
言語サーバーが複数あるものもあるのか?
使える機能がちょっと違うとか?
rust
RLS
Python
vim
TypeScript
開発時からlanguage serverの利用を意図しながら設計された
が、一応非公式で2つの実装がある
が、各々問題があるのでTS team頑張れみたいなことを言っている人もいる ref Scala
Go
gopls
公式
bingo
Swift
C#
Elm
R
OCaml
Haskell
php